\section{Opera}
\label{sec:opera}
Opera ist ein kostenloser Webbrowser des norwegischen Unternehmens Opera Software ASA. Der Browser Opera entstand ursprünglich aus einem Forschungsprojekt des norwegischen Telekommunikationsunternehmens Telenor. Der Opera Browser unterstützt die Betriebssysteme Windows, Mac OS X, Linux, Solaris und FreeBSD.

\subsection{Architektur}
\label{subsec:opera_architektur}
Da der Opera Browser als Freeware lizenziert ist, sind keine detaillierten Informationen über die Architektur offengelegt. Seit der Browser Version 7.0 verfügt Opera über eine eigene \gls{layout_engine} namens ">Presto"<. Diese wird neben mobilen Opera Versionen, wie dem Opera Mini oder Opera Mobile auch als \gls{layout_engine} in Nintendo Spielkonsolen verwendet. Die \gls{layout_engine} ">Presto"< und die \gls{javascript_engine} ">Carakan"< des aktuellen Opera Browsers sind beides Eigenentwicklungen der Opera Software ASA.

\subsection{Erweiterungsmöglichkeiten}
\label{subsec:opera_erweiterungsmoeglichkeiten}

Seit der Version 11.0 unterstützt der Opera Browser Erweiterungen. Diese basieren auf der \acrshort{w3c} Widgets Specification (\vgl{\cite[]{w3c2011widget}}). Aus diesem Grund werden die Meta-Daten der Erweiterung im \acrshort{xml}"=Format definiert. Wie bei Chrome Erweiterungen handelt es sich bei Opera Erweiterungen um komprimierte Archive, die hauptsächlich aus \acrshort{html}"=, \acrshort{css}"= und JavaScript-Dateien bestehen. Der Opera Browser stellt mit der ">Opera Extensions \acrshort{api}"< eine JavaScript \acrshort{api} zur Verfügung über die eine Erweiterung auf browserspezifische Funktionen zugreifen kann.

\autoref{fig:opera_architecture} und die nachfolgende Auflistung erläutern das Konzept und die Funktionsweise von Opera Erweiterungen und die Interaktion einzelner Komponenten untereinander.

\begin{figure}[H]
   \centering
   \includegraphics[width=0.8\textwidth]{images/opera_architecture}
   \caption[Opera Erweiterungskonzept]{Übersicht über das Erweiterungskonzept des Opera Browsers (angelehnt an \cite[]{opera2012_opera_overview})}
   \label{fig:opera_architecture}
\end{figure}

Eine Opera Erweiterung setzt sich hauptsächlich aus einer oder mehreren der nachfolgenden Komponenten zusammen:

\begin{itemize}
  \item{\textbf{\textit{Manifest-Datei:}} Die Manifest-Datei \verb|config.xml| basiert auf der Struktur der \acrshort{w3c} Widgets Specification, sie beinhaltet grundlegende Angaben über die Erweiterung, wie die wichtigsten Dateien, Zugriffsrechte und Meta-Informationen. Jede Opera Erweiterung benötigt zwingend eine Manifest-Datei.}
  \item{\textbf{\textit{Background Page:}} Bei der Background Page handelt es sich um eine unsichtbare \acrshort{html}"=Seite (typischerweise \verb|background.html| genannt), die im Hintergrund des Browser-Prozesses ausgeführt wird. Die Background Page hat vollen Zugriff auf die ">Opera Extensions \acrshort{api}"< und kann über die Messaging \acrshort{api} mit Injected Scripts kommunizieren.}
  \item{\textbf{\textit{\acrshort{ui} Pages:}} Erweiterung können gewöhnliche \acrshort{html}"=Seiten enthalten, die eine grafische Benutzerschnittstelle der Erweiterung repräsentieren. Dies können Options Pages, Seiten zur Verwaltung und Darstellung von Erweiterungs-Einstellungen oder Popup Pages sein. \acrshort{ui} Pages haben direkten Zugriff auf die Background Page.}
  \item{\textbf{\textit{Injected Scripts:}} Injected Scripts sind JavaScript"=Dateien die im Kontext der aktuell geladenen Webseite ausgeführt werden. Sie haben vollen Zugriff auf das \gls{_dom} der geladenen Webseite und können dieses beliebig manipulieren. Injected Scripts haben einen limitierten Zugriff auf die ">Opera Extensions \acrshort{api}"< und unterliegen der \gls{same_orgin_policy}. Über die Messaging \acrshort{api} können Injected Scripts indirekt mit der Background Page kommunizieren.
  Im Gegensatz zu Chrome und Safari Erweiterungen haben Injected Scripts im Opera Browser auch Zugriff auf JavaScript Variablen und Methoden, die von der aktuell geladenen Webseite definiert wurden, und können diese überschreiben.}
\end{itemize}

\subsection{Vor- und Nachteile}
\label{subsec:opera_vor-und_nachteile}
Opera Erweiterungen basieren auf dem offenen \acrshort{w3c} Widgets Specification Standard. Entwickler von Widgets müssen sich nur in die ">Opera Extensions \acrshort{api}"< einarbeiten und können Erweiterungen nach dem gleichen Prinzip wie Widgets entwickeln. Da Widgets auf gängigen Webtechnologien wie \acrshort{html}, \acrshort{css} und JavaScript basieren ist der Initialaufwand für routinierte Webentwickler sehr gering. Das Opera Developer Center bietet eine umfangreiche Dokumentation mit vielen Tutorials und Beispielen an  (\vgl{\cite[]{opera2012_opera_documentation}}).

Opera Erweiterungen werden im gleichen Systemprozess ausgeführt wie der Browser. Somit besteht die Gefahr das inkonsistente Erweiterungen den gesamten Browser zum Absturz bringen können. Obwohl Erweiterungen über das im Opera integrierte Entwicklertool ">Dragonfly"< gedebuggt werden können, bietet der Debugger nicht den gleichen Komfort wie man es von WebKit-basierten Browsern kennt.



